#include <stdio.h>
typedef struct
{
	int num;
	int count;
} Number;
void exchange(Number* p1,Number* p2)
{
	Number temp=*p1;
	*p1=*p2;
	*p2=temp;
}
int main()
{
	int n;
	scanf("%d",&n);
	int arr[n];
	int count2[1001]={0};
	for(int i=0;i<n;i++)
	{
		scanf("%d",&arr[i]);
	}
	for(int i=0;i<n;i++)
	{
		count2[arr[i]]++;
	}
	Number number[1001];
	// fuzhi
	int index=0;
	for(int i=0;i<n;i++)
    {
    	int aim=1;
    	for(int j=0;j<index;j++)
    	{
    		if(number[j].num==arr[i])
    		{
    			aim=0;
    			break;
			}
		}
		if(aim==1)
		{
			number[index++].num=arr[i];
		}
	}
	for(int i=0;i<index;i++)
	{
		number[i].count=count2[number[i].num];
	}
	int max=number[0].count;
	for(int i=0;i<index-1;i++)
	{
		for(int s=0;s<index-1-i;s++)
		{
			if(number[s].count<number[s+1].count||(number[s].count==number[s+1].count)&&number[s].num>number[s+1].num)
			{
				exchange(&number[s],&number[s+1]);
			}
		}
	}
	for(int i=0;i<index;i++)
	{
		printf("%d %d\n",number[i].num,number[i].count);
	}
    return 0;
	
}
	
	
